package editorsvg.editor.vista;

import editorsvg.css.InterpreteCss;
import editorsvg.editor.documento.Documento;
import editorsvg.editor.documento.ElementoSVG;
import editorsvg.editor.documento.ElementoEditable;
import editorsvg.editor.documento.ElementoForma;
import editorsvg.editor.formas.Circulo;
import editorsvg.editor.serializacion.EscritorSVG;
import editorsvg.editor.serializacion.LectorSVG;
import editorsvg.gui.generico.DialogoAceptarCancelar;
import editorsvg.propiedades.tabla.PanelTablaPropiedades;
import java.awt.Cursor;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.geom.Point2D;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.UIManager;

/**
 *
 * @author  Jorge Berjano
 */
public class MarcoPrincipal extends javax.swing.JFrame {

    private EditorDocumento editor;
    private PanelTablaPropiedades panelPropiedades;
    private PanelSimbolos panelSimbolos;
    private PanelArbolElementos panelArbolElementos;
    private boolean seleccionando;
    private File archivoActual;
    private String carpetaActual;

    public MarcoPrincipal() {
        initComponents();

        AdjustmentListener scrollListener = new AdjustmentListener() {

            @Override
            public void adjustmentValueChanged(AdjustmentEvent e) {
                boolean opcional = e.getValueIsAdjusting();
                editor.repintar(opcional);
            }
        };
        scrollEditor.getHorizontalScrollBar().addAdjustmentListener(scrollListener);
        scrollEditor.getVerticalScrollBar().addAdjustmentListener(scrollListener);

        editor = new EditorDocumento();
        panelPropiedades = new PanelTablaPropiedades();
        scrollEditor.setViewportView(editor);

        tabDerecho.add("Propiedades", panelPropiedades);


        panelSimbolos = new PanelSimbolos();
        tabDerecho.add("Simbolos", panelSimbolos);

        panelArbolElementos = new PanelArbolElementos();
        panelArbolElementos.setObservador(new PanelArbolElementos.Observador() {

            @Override
            public void seleccionado(ElementoSVG elemento) {
                if (!seleccionando) {
                    seleccionando = true;
                    editor.seleccionar(elemento, false);
                    editor.repintar();
                    panelPropiedades.setPropiedades(elemento.getPropiedades());
                    seleccionando = false;
                }
            }
        });
        tabDerecho.add("Elementos", panelArbolElementos);

        Documento documento = new Documento();
        insertarElementosPrueba(documento);
        abrirDocumento(documento);
    }

    private void insertarElementosPrueba(Documento documento) {
        long t0 = System.currentTimeMillis();
        for (int i = 0; i < 0; i++) {
            for (int j = 0; j < 0; j++) {
                Circulo forma = new Circulo();
                forma.setCentro(new Point2D.Double(i * 20, j * 20));
                forma.setRadio(new Double(20));                
//                Rectangulo forma = new Rectangulo();
//                forma.setPosicion(new Point2D.Double(i * 10, j * 10));
//                forma.setAlto(50.);
//                forma.setAncho(50.);
                //Estilo estilo = new Estilo();
                //estilo.setRelleno(new Color((int) (3 * Math.random() * 255)));
                ElementoForma n = new ElementoForma(forma);
                n.setId("elemento " + (i + 1) * (j + 1));
                n.estilo().fill().setRgb(0x0f0f0);
                if (((i + 1) * (j + 1)) % 2 == 0) {
                    n.setClase("verde");
                }
                n.actualizar();
                documento.agregarElemento(n);
            }
        }
        long t1 = System.currentTimeMillis();
        System.out.println("tiempo de carga: " + (t1 - t0) + " ms");
    }

    public void abrirDocumento(Documento documento) {

        // TODO: cambiar esto
        //documento.setExtension(new Rectangle2D.Double(0, 0, 500, 500));

        editor.setDocumento(documento);
        editor.setObservador(new EditorDocumento.Observador() {

            @Override
            public void modificado() {
                panelArbolElementos.actualizar();
            }

            @Override
            public void seleccionado(ElementoSVG elemento) {
                if (!seleccionando) {
                    seleccionando = true;
                    panelPropiedades.setPropiedades(elemento == null ? null : elemento.getPropiedades());
//                    panelArbolElementos.seleccionar(elemento);
                    seleccionando = false;
                }

            }
        });

        panelSimbolos.setEditor(editor);
        panelArbolElementos.setDocumento(documento);
    }

    private void abrirArchivo() {

        JFileChooser fileChooser = new JFileChooser(carpetaActual);
        if (fileChooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) {
            return;
        }
        carpetaActual = fileChooser.getSelectedFile().getParent();
        archivoActual = fileChooser.getSelectedFile();

        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

        Documento doc;
        try {
            LectorSVG lector = new LectorSVG();
            doc = lector.leer(archivoActual);
        } catch (Exception ex) {
            System.err.println("No de ha podido abrir el archivo " + archivoActual);
            ex.printStackTrace();
            return;
        } finally {
            setCursor(Cursor.getDefaultCursor());
        }

        abrirDocumento(doc);
    }

    private void guardarArchivo() {

        JFileChooser fileChooser = new JFileChooser(archivoActual);
        if (fileChooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) {
            return;
        }
        carpetaActual = fileChooser.getSelectedFile().getParent();
        archivoActual = fileChooser.getSelectedFile();

        ElementoEditable documento = editor.getDocumento();
        EscritorSVG escritor;
        try {
            escritor = new EscritorSVG(archivoActual);
            escritor.escribir(documento);
        } catch (Exception ex) {
            System.err.println("No de pudo guardar el archivo " + archivoActual);
            ex.printStackTrace();
        }
    }

    private void aplicarReglasCss() {
        System.out.println("Comienzo aplicacion reglas css...");
        long t0 = System.currentTimeMillis();
       
        InterpreteCss interprete = new InterpreteCss();
        interprete.interpretar(editor.getDocumento());

        long t1 = System.currentTimeMillis();
        System.out.println("tiempo de aplicacion reglas css: " + (t1 - t0) + " ms");
        
        editor.repintar();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        grupoHerramientas = new javax.swing.ButtonGroup();
        panelEditor = new javax.swing.JPanel();
        split = new javax.swing.JSplitPane();
        tabDerecho = new javax.swing.JTabbedPane();
        scrollEditor = new javax.swing.JScrollPane();
        barraFormas = new javax.swing.JToolBar();
        botonHerramientaSeleccion = new javax.swing.JToggleButton();
        botonHerramientaSeleccion1 = new javax.swing.JToggleButton();
        botonHerramientaMover = new javax.swing.JToggleButton();
        botonHerramientaZoom = new javax.swing.JToggleButton();
        botonHerramientaLinea = new javax.swing.JToggleButton();
        botonHerramientaCirculo = new javax.swing.JToggleButton();
        botonHerramientaElipse = new javax.swing.JToggleButton();
        botonHerramientaRectangulo = new javax.swing.JToggleButton();
        botonHerramientaPolilinea = new javax.swing.JToggleButton();
        botonHerramientaPoligono = new javax.swing.JToggleButton();
        botonHerramientaTrayecto = new javax.swing.JToggleButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        botonEncajarDocumento = new javax.swing.JButton();
        botonDeshacer = new javax.swing.JButton();
        botonRehacer = new javax.swing.JButton();
        botonTraerAlFrente = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        botonBajar = new javax.swing.JButton();
        botonLlevarAlFondo = new javax.swing.JButton();
        botonBorrar = new javax.swing.JButton();
        botonAgrupar = new javax.swing.JButton();
        botonDesagrupar = new javax.swing.JButton();
        botonConvertirSimbolo = new javax.swing.JButton();
        botonAcercar = new javax.swing.JButton();
        botonAlejar = new javax.swing.JButton();
        botonCss = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        menuArchivo = new javax.swing.JMenu();
        itemAbrir = new javax.swing.JMenuItem();
        itemGuardar = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SVG Factory");

        panelEditor.setPreferredSize(new java.awt.Dimension(800, 600));
        panelEditor.setLayout(new java.awt.BorderLayout());

        split.setDividerLocation(500);
        split.setResizeWeight(1.0);
        split.setRightComponent(tabDerecho);
        split.setLeftComponent(scrollEditor);

        panelEditor.add(split, java.awt.BorderLayout.CENTER);

        barraFormas.setRollover(true);

        grupoHerramientas.add(botonHerramientaSeleccion);
        botonHerramientaSeleccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/flecha.png"))); // NOI18N
        botonHerramientaSeleccion.setToolTipText("Seleccion");
        botonHerramientaSeleccion.setFocusable(false);
        botonHerramientaSeleccion.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaSeleccion.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaSeleccion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaSeleccionActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaSeleccion);

        grupoHerramientas.add(botonHerramientaSeleccion1);
        botonHerramientaSeleccion1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/flechanegra.png"))); // NOI18N
        botonHerramientaSeleccion1.setToolTipText("Seleccion");
        botonHerramientaSeleccion1.setFocusable(false);
        botonHerramientaSeleccion1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaSeleccion1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaSeleccion1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaSeleccion1ActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaSeleccion1);

        grupoHerramientas.add(botonHerramientaMover);
        botonHerramientaMover.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/mano.png"))); // NOI18N
        botonHerramientaMover.setToolTipText("Desplazar la vista");
        botonHerramientaMover.setFocusable(false);
        botonHerramientaMover.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaMover.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaMover.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaMoverActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaMover);

        grupoHerramientas.add(botonHerramientaZoom);
        botonHerramientaZoom.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/lupa.png"))); // NOI18N
        botonHerramientaZoom.setToolTipText("Acercar o alejar la vista");
        botonHerramientaZoom.setFocusable(false);
        botonHerramientaZoom.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaZoom.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaZoom.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaZoomActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaZoom);

        grupoHerramientas.add(botonHerramientaLinea);
        botonHerramientaLinea.setText("lin");
        botonHerramientaLinea.setToolTipText("Linea");
        botonHerramientaLinea.setFocusable(false);
        botonHerramientaLinea.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaLinea.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaLinea.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaLineaActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaLinea);

        grupoHerramientas.add(botonHerramientaCirculo);
        botonHerramientaCirculo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/circulo.png"))); // NOI18N
        botonHerramientaCirculo.setToolTipText("Circulo");
        botonHerramientaCirculo.setFocusable(false);
        botonHerramientaCirculo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaCirculo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaCirculo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaCirculoActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaCirculo);

        grupoHerramientas.add(botonHerramientaElipse);
        botonHerramientaElipse.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/circulo.png"))); // NOI18N
        botonHerramientaElipse.setToolTipText("Elipse");
        botonHerramientaElipse.setFocusable(false);
        botonHerramientaElipse.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaElipse.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaElipse.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaElipseActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaElipse);

        grupoHerramientas.add(botonHerramientaRectangulo);
        botonHerramientaRectangulo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/cuadrado.png"))); // NOI18N
        botonHerramientaRectangulo.setToolTipText("Rectangulo");
        botonHerramientaRectangulo.setFocusable(false);
        botonHerramientaRectangulo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaRectangulo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaRectangulo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaRectanguloActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaRectangulo);

        grupoHerramientas.add(botonHerramientaPolilinea);
        botonHerramientaPolilinea.setText("pl");
        botonHerramientaPolilinea.setToolTipText("Rectangulo");
        botonHerramientaPolilinea.setFocusable(false);
        botonHerramientaPolilinea.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaPolilinea.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaPolilinea.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaPolilineaActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaPolilinea);

        grupoHerramientas.add(botonHerramientaPoligono);
        botonHerramientaPoligono.setText("plg");
        botonHerramientaPoligono.setToolTipText("Rectangulo");
        botonHerramientaPoligono.setFocusable(false);
        botonHerramientaPoligono.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaPoligono.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaPoligono.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaPoligonoActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaPoligono);

        grupoHerramientas.add(botonHerramientaTrayecto);
        botonHerramientaTrayecto.setText("tr");
        botonHerramientaTrayecto.setToolTipText("Rectangulo");
        botonHerramientaTrayecto.setFocusable(false);
        botonHerramientaTrayecto.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonHerramientaTrayecto.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonHerramientaTrayecto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonHerramientaTrayectoActionPerformed(evt);
            }
        });
        barraFormas.add(botonHerramientaTrayecto);
        barraFormas.add(jSeparator2);

        botonEncajarDocumento.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/encajar.png"))); // NOI18N
        botonEncajarDocumento.setToolTipText("Deshacer");
        botonEncajarDocumento.setFocusable(false);
        botonEncajarDocumento.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonEncajarDocumento.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonEncajarDocumento.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEncajarDocumentoActionPerformed(evt);
            }
        });
        barraFormas.add(botonEncajarDocumento);

        botonDeshacer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/deshacer.png"))); // NOI18N
        botonDeshacer.setToolTipText("Deshacer");
        botonDeshacer.setFocusable(false);
        botonDeshacer.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonDeshacer.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonDeshacer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDeshacerActionPerformed(evt);
            }
        });
        barraFormas.add(botonDeshacer);

        botonRehacer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/rehacer.png"))); // NOI18N
        botonRehacer.setToolTipText("Rehacer");
        botonRehacer.setFocusable(false);
        botonRehacer.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonRehacer.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonRehacer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonRehacerActionPerformed(evt);
            }
        });
        barraFormas.add(botonRehacer);

        botonTraerAlFrente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/alfrente.png"))); // NOI18N
        botonTraerAlFrente.setToolTipText("Traer al frente");
        botonTraerAlFrente.setFocusable(false);
        botonTraerAlFrente.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonTraerAlFrente.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonTraerAlFrente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonTraerAlFrenteActionPerformed(evt);
            }
        });
        barraFormas.add(botonTraerAlFrente);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/subir.png"))); // NOI18N
        jButton1.setToolTipText("Subir un nivel");
        jButton1.setFocusable(false);
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        barraFormas.add(jButton1);

        botonBajar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/bajar.png"))); // NOI18N
        botonBajar.setToolTipText("Bajar un nivel");
        botonBajar.setFocusable(false);
        botonBajar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonBajar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonBajar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBajarActionPerformed(evt);
            }
        });
        barraFormas.add(botonBajar);

        botonLlevarAlFondo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/alfondo.png"))); // NOI18N
        botonLlevarAlFondo.setToolTipText("Llevar al fondo");
        botonLlevarAlFondo.setFocusable(false);
        botonLlevarAlFondo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonLlevarAlFondo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonLlevarAlFondo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonLlevarAlFondoActionPerformed(evt);
            }
        });
        barraFormas.add(botonLlevarAlFondo);

        botonBorrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/borrar.png"))); // NOI18N
        botonBorrar.setToolTipText("Borrar");
        botonBorrar.setFocusable(false);
        botonBorrar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonBorrar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonBorrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBorrarActionPerformed(evt);
            }
        });
        barraFormas.add(botonBorrar);

        botonAgrupar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/agrupar.png"))); // NOI18N
        botonAgrupar.setFocusable(false);
        botonAgrupar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonAgrupar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonAgrupar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgruparActionPerformed(evt);
            }
        });
        barraFormas.add(botonAgrupar);

        botonDesagrupar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/desagrupar.png"))); // NOI18N
        botonDesagrupar.setFocusable(false);
        botonDesagrupar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonDesagrupar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonDesagrupar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDesagruparActionPerformed(evt);
            }
        });
        barraFormas.add(botonDesagrupar);

        botonConvertirSimbolo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/recursos/simbolo.png"))); // NOI18N
        botonConvertirSimbolo.setFocusable(false);
        botonConvertirSimbolo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonConvertirSimbolo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonConvertirSimbolo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonConvertirSimboloActionPerformed(evt);
            }
        });
        barraFormas.add(botonConvertirSimbolo);

        botonAcercar.setText("+");
        botonAcercar.setFocusable(false);
        botonAcercar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonAcercar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonAcercar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAcercarActionPerformed(evt);
            }
        });
        barraFormas.add(botonAcercar);

        botonAlejar.setText("-");
        botonAlejar.setFocusable(false);
        botonAlejar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonAlejar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonAlejar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAlejarActionPerformed(evt);
            }
        });
        barraFormas.add(botonAlejar);

        botonCss.setText("css");
        botonCss.setFocusable(false);
        botonCss.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonCss.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonCss.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCssActionPerformed(evt);
            }
        });
        barraFormas.add(botonCss);

        panelEditor.add(barraFormas, java.awt.BorderLayout.PAGE_START);

        getContentPane().add(panelEditor, java.awt.BorderLayout.CENTER);

        menuArchivo.setText("File");

        itemAbrir.setText("Abrir");
        itemAbrir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemAbrirActionPerformed(evt);
            }
        });
        menuArchivo.add(itemAbrir);

        itemGuardar.setText("Guardar");
        itemGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemGuardarActionPerformed(evt);
            }
        });
        menuArchivo.add(itemGuardar);

        jMenuBar1.add(menuArchivo);

        jMenu2.setText("Edit");
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void botonHerramientaSeleccionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaSeleccionActionPerformed
    editor.activarHerramientaSeleccion();
}//GEN-LAST:event_botonHerramientaSeleccionActionPerformed

private void botonHerramientaMoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaMoverActionPerformed
    editor.activarHerramientaTraveling();
}//GEN-LAST:event_botonHerramientaMoverActionPerformed

private void botonHerramientaZoomActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaZoomActionPerformed
    editor.activarHerramientaZoom();
}//GEN-LAST:event_botonHerramientaZoomActionPerformed

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
    editor.ejecutarSubirSeleccion();
}//GEN-LAST:event_jButton1ActionPerformed

private void botonBajarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBajarActionPerformed
    editor.ejecutarBajarSeleccion();
}//GEN-LAST:event_botonBajarActionPerformed

private void botonTraerAlFrenteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonTraerAlFrenteActionPerformed
    editor.ejecutarTraerAlFrenteSeleccion();
}//GEN-LAST:event_botonTraerAlFrenteActionPerformed

private void botonLlevarAlFondoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonLlevarAlFondoActionPerformed
    editor.ejecutarLlevarAlFondoSeleccion();
}//GEN-LAST:event_botonLlevarAlFondoActionPerformed

private void botonDeshacerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDeshacerActionPerformed
    editor.deshacer();
    panelSimbolos.actualizar();
}//GEN-LAST:event_botonDeshacerActionPerformed

private void botonRehacerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonRehacerActionPerformed
    editor.rehacer();
    panelSimbolos.actualizar();
}//GEN-LAST:event_botonRehacerActionPerformed

private void botonHerramientaRectanguloActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaRectanguloActionPerformed
    editor.activarHerramientaRectangulo();
}//GEN-LAST:event_botonHerramientaRectanguloActionPerformed

private void botonHerramientaCirculoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaCirculoActionPerformed
    editor.activarHerramientaCirculo();
}//GEN-LAST:event_botonHerramientaCirculoActionPerformed

private void botonBorrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBorrarActionPerformed
    editor.ejecutarBorrarElementosSeleccionados();
}//GEN-LAST:event_botonBorrarActionPerformed

private void botonAgruparActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgruparActionPerformed
    editor.ejecutarAgruparSeleccionados();
}//GEN-LAST:event_botonAgruparActionPerformed

private void botonDesagruparActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDesagruparActionPerformed
    editor.ejecutarDesagruparSeleccionados();
}//GEN-LAST:event_botonDesagruparActionPerformed

private void botonConvertirSimboloActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonConvertirSimboloActionPerformed

    PanelNuevoSimbolo panel = new PanelNuevoSimbolo();
    DialogoAceptarCancelar dialogo = new DialogoAceptarCancelar(this, "Nuevo símbolo", panel);
    dialogo.setVisible(true);
    if (dialogo.getResultado() == DialogoAceptarCancelar.ACEPTAR) {
        editor.ejecutarConvertirSimboloSeleccionados(panel.getNombre());
        panelSimbolos.actualizar();
    }
}//GEN-LAST:event_botonConvertirSimboloActionPerformed

private void botonHerramientaTrayectoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaTrayectoActionPerformed
    editor.activarHerramientaTrayecto();
}//GEN-LAST:event_botonHerramientaTrayectoActionPerformed

private void botonEncajarDocumentoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEncajarDocumentoActionPerformed
    editor.encajarDocumento();
}//GEN-LAST:event_botonEncajarDocumentoActionPerformed

private void botonHerramientaPolilineaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaPolilineaActionPerformed
    editor.activarHerramientaPolilinea();
}//GEN-LAST:event_botonHerramientaPolilineaActionPerformed

private void botonHerramientaElipseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaElipseActionPerformed
    editor.activarHerramientaElipse();
}//GEN-LAST:event_botonHerramientaElipseActionPerformed

private void botonHerramientaLineaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaLineaActionPerformed
    editor.activarHerramientaLinea();
}//GEN-LAST:event_botonHerramientaLineaActionPerformed

private void botonAcercarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAcercarActionPerformed
    editor.zoom(2.);
}//GEN-LAST:event_botonAcercarActionPerformed

private void botonAlejarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAlejarActionPerformed
    editor.zoom(.5);
}//GEN-LAST:event_botonAlejarActionPerformed

private void itemAbrirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemAbrirActionPerformed
    abrirArchivo();
}//GEN-LAST:event_itemAbrirActionPerformed

private void itemGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemGuardarActionPerformed
    guardarArchivo();
}//GEN-LAST:event_itemGuardarActionPerformed

private void botonCssActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCssActionPerformed
    aplicarReglasCss();
}//GEN-LAST:event_botonCssActionPerformed

private void botonHerramientaPoligonoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaPoligonoActionPerformed
    editor.activarHerramientaPoligono();
}//GEN-LAST:event_botonHerramientaPoligonoActionPerformed

private void botonHerramientaSeleccion1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonHerramientaSeleccion1ActionPerformed
    editor.activarHerramientaModificacion();
}//GEN-LAST:event_botonHerramientaSeleccion1ActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new MarcoPrincipal().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JToolBar barraFormas;
    private javax.swing.JButton botonAcercar;
    private javax.swing.JButton botonAgrupar;
    private javax.swing.JButton botonAlejar;
    private javax.swing.JButton botonBajar;
    private javax.swing.JButton botonBorrar;
    private javax.swing.JButton botonConvertirSimbolo;
    private javax.swing.JButton botonCss;
    private javax.swing.JButton botonDesagrupar;
    private javax.swing.JButton botonDeshacer;
    private javax.swing.JButton botonEncajarDocumento;
    private javax.swing.JToggleButton botonHerramientaCirculo;
    private javax.swing.JToggleButton botonHerramientaElipse;
    private javax.swing.JToggleButton botonHerramientaLinea;
    private javax.swing.JToggleButton botonHerramientaMover;
    private javax.swing.JToggleButton botonHerramientaPoligono;
    private javax.swing.JToggleButton botonHerramientaPolilinea;
    private javax.swing.JToggleButton botonHerramientaRectangulo;
    private javax.swing.JToggleButton botonHerramientaSeleccion;
    private javax.swing.JToggleButton botonHerramientaSeleccion1;
    private javax.swing.JToggleButton botonHerramientaTrayecto;
    private javax.swing.JToggleButton botonHerramientaZoom;
    private javax.swing.JButton botonLlevarAlFondo;
    private javax.swing.JButton botonRehacer;
    private javax.swing.JButton botonTraerAlFrente;
    private javax.swing.ButtonGroup grupoHerramientas;
    private javax.swing.JMenuItem itemAbrir;
    private javax.swing.JMenuItem itemGuardar;
    private javax.swing.JButton jButton1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JMenu menuArchivo;
    private javax.swing.JPanel panelEditor;
    private javax.swing.JScrollPane scrollEditor;
    private javax.swing.JSplitPane split;
    private javax.swing.JTabbedPane tabDerecho;
    // End of variables declaration//GEN-END:variables
}
